package com.haha.webSocket.core.common;

/**
 * 机器人事件列表Id
 */
public class BotIntent {

    /**
     * GUILDS (1 << 0)
     *   - GUILD_CREATE           // 当机器人加入新guild时
     *   - GUILD_UPDATE           // 当guild资料发生变更时
     *   - GUILD_DELETE           // 当机器人退出guild时
     *   - CHANNEL_CREATE         // 当channel被创建时
     *   - CHANNEL_UPDATE         // 当channel被更新时
     *   - CHANNEL_DELETE         // 当channel被删除时
     */
    public static final int IntentGuilds = 1 << 0;

    /**
     * GUILD_MEMBERS (1 << 1)
     *   - GUILD_MEMBER_ADD       // 当成员加入时
     *   - GUILD_MEMBER_UPDATE    // 当成员资料变更时
     *   - GUILD_MEMBER_REMOVE    // 当成员被移除时
     */
    public static final int IntentGuildMembers = 1 << 1;

    @Deprecated
    public static final int IntentGuildBans = 1 << 2;

    @Deprecated
    public static final int IntentGuildEmojis = 1 << 3;

    @Deprecated
    public static final int IntentGuildIntegrations = 1 << 4;

    @Deprecated
    public static final int IntentGuildWebhooks = 1 << 5;

    @Deprecated
    public static final int IntentGuildInvites = 1 << 6;

    @Deprecated
    public static final int IntentGuildVoiceStates = 1 << 7;

    @Deprecated
    public static final int IntentGuildPresences = 1 << 8;

    /**
     * GUILD_MESSAGES (1 << 9)    // 消息事件，仅 *私域* 机器人能够设置此 intents。
     *   - MESSAGE_CREATE         // 发送消息事件，代表频道内的全部消息，而不只是 at 机器人的消息。内容与 AT_MESSAGE_CREATE 相同
     *   - MESSAGE_DELETE         // 删除（撤回）消息事件
     */
    public static final int IntentGuildMessages = 1 << 9;

    /**
     * GUILD_MESSAGE_REACTIONS (1 << 10)
     *   - MESSAGE_REACTION_ADD    // 为消息添加表情表态
     *   - MESSAGE_REACTION_REMOVE // 为消息删除表情表态
     */
    public static final int IntentGuildMessageReactions = 1 << 10;

    @Deprecated
    public static final int IntentGuildMessageTyping = 1 << 11;


    /**
     *   DIRECT_MESSAGE (1 << 12)
     *   - DIRECT_MESSAGE_CREATE   // 当收到用户发给机器人的私信消息时
     *   - DIRECT_MESSAGE_DELETE   // 删除（撤回）消息事件
     */
    public static final int IntentDirectMessages = 1 << 12;

    /**
     */
    @Deprecated
    public static final int IntentDirectMessageReactions = 1 << 13;

    @Deprecated
    public static final int IntentDirectMessageTyping = 1 << 14;

    /**
     * 论坛事件, 此为公域的论坛事件
     * OPEN_FORUMS_EVENT (1 << 18)      // 论坛事件, 此为公域的论坛事件
     *   - OPEN_FORUM_THREAD_CREATE     // 当用户创建主题时
     *   - OPEN_FORUM_THREAD_UPDATE     // 当用户更新主题时
     *   - OPEN_FORUM_THREAD_DELETE     // 当用户删除主题时
     *   - OPEN_FORUM_POST_CREATE       // 当用户创建帖子时
     *   - OPEN_FORUM_POST_DELETE       // 当用户删除帖子时
     *   - OPEN_FORUM_REPLY_CREATE      // 当用户回复评论时
     *   - OPEN_FORUM_REPLY_DELETE      // 当用户删除评论时
     */
    public static final int IntentOpenForumsEvent = 1 << 18;

    /**
     * 音视频/直播子频道成员进出事件
     * AUDIO_OR_LIVE_CHANNEL_MEMBER (1 << 19)  // 音视频/直播子频道成员进出事件
     *   - AUDIO_OR_LIVE_CHANNEL_MEMBER_ENTER  // 当用户进入音视频/直播子频道
     *   - AUDIO_OR_LIVE_CHANNEL_MEMBER_EXIT   // 当用户离开音视频/直播子频道
     */
    public static final int IntentAuditOrLiveChannelMember = 1 << 19;

    /**
     * 是否打开公域群/C2C消息事件的监听
     *   - GROUP_AT_MESSAGE_CREATE            // 当收到群@机器人的消息时
     *   - C2C_MESSAGE_CREATE                 // 当收到C2C的消息时
     *   - GROUP_ADD_ROBOT                    // 机器人加入群聊
     *   - GROUP_DEL_ROBOT                    // 机器人退出群聊
     *   - GROUP_MSG_REJECT                   // 群聊拒绝机器人主动消息
     *   - GROUP_MSG_RECEIVE                  // 群聊接受机器人主动消息
     *   - FRIEND_ADD                         // 用户添加机器人
     *   - FRIEND_DEL                         // 用户删除机器人
     *   - C2C_MSG_REJECT                     // 用户拒绝机器人主动消息
     *   - C2C_MSG_RECEIVE                    // 用户接受机器人主动消息
     */
    public static final int IntentPublicMessage = 1 << 25;

    /**
     * 互动事件
     * INTERACTION (1 << 26)
     *   - INTERACTION_CREATE     // 互动事件创建时
     */
    public static final int IntentInteraction = 1 << 26;

    /**
     * IntentAudit 审核事件
     * MESSAGE_AUDIT (1 << 27)
     * - MESSAGE_AUDIT_PASS     // 消息审核通过
     * - MESSAGE_AUDIT_REJECT   // 消息审核不通过
     */
    public static final int IntentAudit = 1 << 27;

    /**
     * IntentForum 论坛事件 论坛事件，仅 *私域* 机器人能够设置此 intents。
     * 	 - THREAD_CREATE     当用户创建主题时
     * 	 - THREAD_UPDATE     当用户更新主题时
     * 	 - THREAD_DELETE     当用户删除主题时
     * 	 - POST_CREATE       当用户创建帖子时
     * 	 - POST_DELETE       当用户删除帖子时
     * 	 - REPLY_CREATE      当用户回复评论时
     * 	 - REPLY_DELETE      当用户回复评论时
     * 	 - FORUM_PUBLISH_AUDIT_RESULT      当用户发表审核通过时
     */
    public static final int IntentForum = 1 << 28;

    /**
     * IntentAudio 音频机器人事件
     * 	- AUDIO_START           音频开始播放时
     * 	- AUDIO_FINISH          音频播放结束时
     * 	- AUDIO_OFF_MIC         下麦时
     * 	- AUDIO_ON_MIC          上麦时
     */
    public static final int IntentAudio = 1 << 29;

    /**
     * 只接收@消息事件 消息事件，此为公域的消息事件
     * - AT_MESSAGE_CREATE       当收到@机器人的消息时
     * - PUBLIC_MESSAGE_DELETE   当频道的消息被删除时
     */
    public static final int IntentPublicGuildMessage  = 1 << 30;

    /**
     * 计算事件
     * @param intents
     * @return
     */
    public static int computeIntents(int... intents) {
        int result = 0;
        for (int intent : intents) {
            result |= intent;
        }
        return result;
    }

}
